package com.example.demo.service;

import org.springframework.stereotype.Service;

import java.io.IOException;
import java.util.Date;
import java.nio.file.Path;

import org.springframework.stereotype.Service;
import java.util.Date;
import java.nio.file.Path;
import java.util.List;

import org.springframework.stereotype.Service;
import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.*;
import java.util.*;
import java.util.stream.Collectors;

@Service
public class FileBackupService {

    /**
     * 按Date阈值备份文件
     * @param sourceDir 源目录
     * @param targetDir 目标目录
     * @param thresholdDate 时间阈值
     * @return 备份结果信息
     */
    public Map<String, Object> backupFilesAfterDate(String sourceDir,
                                                    String targetDir,
                                                    Date thresholdDate,long number) throws IOException {

        // 1. 获取符合条件的文件（按创建时间排序）
        List<Path> files = findFilesAfterDate(sourceDir, thresholdDate,number);
        // 2. 安全复制（跳过最后一个文件 + 已存在文件）
        int copiedCount = copyFilesSafely(files, targetDir);
        // 3. 返回结果
        Map<String, Object> result = new HashMap<>();
        result.put("totalMatchedFiles", files.size());
        result.put("copiedFiles", copiedCount);
        result.put("lastExcludedFile", files.isEmpty() ? null : files.get(files.size() - 1).toString());
        return result;
    }

    /**
     * 查找创建时间晚于指定Date的文件（按时间升序排序）
     */
    private List<Path> findFilesAfterDate(String sourceDir, Date thresholdDate,long minNumber) throws IOException {
        return Files.list(Paths.get(sourceDir))
                .filter(Files::isRegularFile)
                .filter(path -> {
                    String fileName = path.getFileName().toString();
                    if (!fileName.toLowerCase().endsWith(".ts")) {
                        return false;
                    }
                    try {
                        String baseName = fileName.substring(0, fileName.lastIndexOf('.'));
                        long fileNumber = Long.parseLong(baseName);
                        return fileNumber > minNumber;
                    } catch (NumberFormatException e) {
                        return false; // 忽略非数字文件名
                    }
                })
                .sorted(Comparator.comparingLong(path -> {
                    String fileName = path.getFileName().toString();
                    String baseName = fileName.substring(0, fileName.lastIndexOf('.'));
                    return Long.parseLong(baseName);
                }))
                .collect(Collectors.toList());
    }

    /**
     * 安全复制文件（跳过最后一个文件 + 已存在文件）
     */
    private int copyFilesSafely(List<Path> files, String targetDir) throws IOException {
        if (files.isEmpty()) return 0;
        Path targetPath = Paths.get(targetDir);
        Files.createDirectories(targetPath);
        int copiedCount = 0;
        for (int i = 0; i < files.size() - 1; i++) {
            Path file = files.get(i);
            Path dest = targetPath.resolve(file.getFileName());
            if (!Files.exists(dest)) {
                Files.copy(file, dest);
                copiedCount++;
            }
        }
        return copiedCount;
    }
}